﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Fuyao.Business.Entities.Models;
using Fuyao.Business.Logic.BC;
using Fuyao.Win.UI.Util;
using Fuyao.Win.UI.Common;

namespace Fuyao.Win.UI.Seguridad
{
    public partial class frmUsuario : Form
    {       
        BusinessLogic bc = new BusinessLogic();
        List<Perfil> listPerfil = new List<Perfil>();

        #region Propiedades
        public bool action { get; set; }
        public Usuario beUsuario { get; set; }
        public int UsuarioID { get; set; }
        #endregion

        public frmUsuario()
        {
            InitializeComponent();
        }

        private void frmUsuario_Load(object sender, EventArgs e)
        {            
            loadUI();
        }

        private void loadUI()
        {
            loadDefaultInformation();
            if (UsuarioID == 0) newUsuario();
            else editUsuario();
        }

        private void loadDefaultInformation()
        {
            action = false;
            this.cboEstado.SelectedIndex = 0;
            cargarCboPerfiles();
            if (UsuarioID == 0)
            {
                this.cboEstado.Enabled = false;
                this.Text = "NUEVO USUARIO";
            }
            else
            {
                this.cboEstado.Enabled = true;
                this.Text = "EDITAR CONDUCTOR";
            }
        }

        private void editUsuario()
        {
            beUsuario = bc.getUsuarioByUsuarioID(UsuarioID);
            cargarDatosUsuario(beUsuario);
        }

        private void cargarDatosUsuario(Usuario beUser)
        {
            this.txtNombre.Text = beUser.Nombre;
            this.txtNombre.Tag = beUser.UsuarioID;
            this.txtApePaterno.Text = beUser.ApellidoPaterno;
            this.txtApeMaterno.Text = beUser.ApellidoMaterno;
            this.txtTelefono.Text = beUser.Telefono;
            this.cboPerfil.SelectedValue = beUser.PerfilID;
            this.txtLogin.Text = beUser.UserName;
            this.txtContraseña.Text = beUser.Password;
            this.cboEstado.SelectedIndex = (beUser.Estado == true ? 0 : 1);
        }

        private void newUsuario()
        {
            beUsuario = new Usuario();
            beUsuario.CreadoPor = VariablesGlobales.GlobalEnUsuario.UsuarioID;
        }

        private void cargarCboPerfiles()
        {
            Utilitarios.cargarCboPerfiles(this.cboPerfil);
        }

        private Usuario llenarEntidad()
        {
            Usuario beUsuario = new Usuario();
            beUsuario.UsuarioID = UsuarioID;
            beUsuario.Nombre = this.txtNombre.Text.Trim();
            beUsuario.ApellidoPaterno = this.txtApePaterno.Text.Trim();
            beUsuario.ApellidoMaterno = this.txtApeMaterno.Text.Trim();
            beUsuario.Telefono = this.txtTelefono.Text.Trim();
            beUsuario.UserName = this.txtLogin.Text.Trim();
            beUsuario.Password = this.txtContraseña.Text.Trim();
            beUsuario.Estado = this.cboEstado.SelectedIndex == 0 ? true : false;
            beUsuario.PerfilID = Convert.ToInt32(this.cboPerfil.SelectedValue);
            beUsuario.CreadoPor = VariablesGlobales.GlobalEnUsuario.UsuarioID;
            return beUsuario;
        }

        private void btnGrabar_Click(object sender, EventArgs e)
        {
            if (validarCamposRequeridos())
            {
                if (UsuarioID == 0) //true:Insert
                {
                    if (bc.InsertUser(llenarEntidad()))
                    {
                        MessageBox.Show("Se ingresaron los datos correctamente", "Sistema FUYAO - Mensaje de Confirmación", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        cerrarForm();
                    }
                    else
                        MessageBox.Show("Error al ingresar los datos, contacte con Sistemas", "Sistema FUYAO - Mensaje de Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                }
                else //else:Editar
                {
                    if (bc.UpdateUser(llenarEntidad()))
                    {
                        MessageBox.Show("Se actualizaron los datos correctamente", "Sistema FUYAO - Mensaje de Confirmación", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        cerrarForm();
                    }
                    else
                        MessageBox.Show("Error al actuallizar los datos, contacte con Sistemas", "Sistema FUYAO - Mensaje de Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                }
            }
        }

        private void cerrarForm()
        {
            this.Close();
            action = true;
        }

        private bool validarCamposRequeridos()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("Ingrese los campos requeridos: " + System.Environment.NewLine);
            bool isValid = true;

            if (String.IsNullOrEmpty(txtNombre.Text))
            {
                sb.Append("- Nombre" + System.Environment.NewLine);
                ErrorProv.SetError(txtNombre, "Ingrese el nombre");
                isValid = false;
            }

            if (String.IsNullOrEmpty(txtApePaterno.Text))
            {
                sb.Append("- Apellido Paterno" + System.Environment.NewLine);
                ErrorProv.SetError(txtApePaterno, "Ingrese el apellido paterno");
                isValid = false;
            }

            if (String.IsNullOrEmpty(txtApeMaterno.Text))
            {
                sb.Append("- Apellido Materno" + System.Environment.NewLine);
                ErrorProv.SetError(txtApeMaterno, "Ingrese el apellido materno");
                isValid = false;
            }

            if (String.IsNullOrEmpty(txtLogin.Text))
            {
                sb.Append("- Login" + System.Environment.NewLine);
                ErrorProv.SetError(txtLogin, "Ingrese el login del usuario");
                isValid = false;
            }

            if (String.IsNullOrEmpty(txtContraseña.Text))
            {
                sb.Append("- Contraseña" + System.Environment.NewLine);
                ErrorProv.SetError(txtContraseña, "Ingrese la contraseña del usuario");
                isValid = false;
            }

            if (!isValid)
                MessageBox.Show(sb.ToString(), "Sistema FUYAO - Validando opción", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
           
            return isValid;
        }

        private void btnCancelar_Click(object sender, EventArgs e)
        {
            if (UsuarioID == 0)
            {
                foreach (Control c in groupBox1.Controls) if (c is TextBox) ((TextBox)c).Text = string.Empty;
                newUsuario();
            }
            else resetDatosControles(); //else:Edit                       
        }

        private void resetDatosControles()
        {
            cargarDatosUsuario(beUsuario);
        }

        private void frmUsuario_KeyPress(object sender, KeyPressEventArgs e)
        {
            Utilitarios.cerrarFormularioEscape(e, this);
        }

        private void txt_TextChanged(object sender, EventArgs e)
        {
            TextBox tbx = (TextBox)sender;
            ErrorProv.SetError(tbx, "");
        }

        private void txtTelefono_KeyPress(object sender, KeyPressEventArgs e)
        {
            Utilitarios.vSoloNumeros(e);
        }

    }
}
